Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


LXST/Primitives/Players.py master (1c8c6e86) Text, 3.74 KB

T8b949e# Copyright 2024-2026, Mark Qvist

Tff7b72import T7ee787LXST
Tff7b72import T7ee787time
Tff7b72import T7ee787threading
Tff7b72import T7ee787os
Tff7b72import T7ee787gc

Tff7b72from T7ee787LXSTT7ee787.T7ee787Sinks Tff7b72import Te6edf3LineSink
Tff7b72from T7ee787LXSTT7ee787.T7ee787Sources Tff7b72import Te6edf3OpusFileSource

Tff7b72class T56d364FilePlayerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTff7b72=Tff7b72NoneTb4b4b4, Te6edf3deviceTff7b72=Tff7b72NoneTb4b4b4, Te6edf3loopTff7b72=Tff7b72FalseTb4b4b4, Te6edf3gainTff7b72=T79c0ff0.0Tb4b4b4, Te6edf3release_on_finishTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_file_path Tff7b72= Te6edf3path
Tff7b72selfTff7b72.Td2a8ff_playback_device Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff__finished_callback Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff__release_on_finish Tff7b72= Te6edf3release_on_finish
Tff7b72selfTff7b72.Td2a8ff__loop Tff7b72= Te6edf3loop
Tff7b72selfTff7b72.Td2a8ff__source Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff__gain Tff7b72= Te6edf3gain
Tff7b72selfTff7b72.Td2a8ff__sink Tff7b72= Te6edf3LineSinkTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_playback_deviceTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__raw Tff7b72= Te6edf3LXSTTff7b72.Td2a8ffCodecsTff7b72.Td2a8ffRawTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__loopback Tff7b72= Te6edf3LXSTTff7b72.Td2a8ffSourcesTff7b72.Td2a8ffLoopbackTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__output_pipeline Tff7b72= Te6edf3LXSTTff7b72.Td2a8ffPipelineTb4b4b4(Te6edf3sourceTff7b72=Tff7b72selfTff7b72.Td2a8ff__loopbackTb4b4b4, Te6edf3codecTff7b72=Tff7b72selfTff7b72.Td2a8ff__rawTb4b4b4, Te6edf3sinkTff7b72=Tff7b72selfTff7b72.Td2a8ff__sinkTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__input_pipeline Tff7b72= Tff7b72None
Tff7b72if Te6edf3pathTb4b4b4: Tff7b72selfTff7b72.Td2a8ffset_sourceTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_file_pathTb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffgainTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ff__gain

Tf0883e@gainTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffgainTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3db Tff7b72= Tffa657floatTb4b4b4(Te6edf3dbTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72raise Tf85149TypeErrorTb4b4b4(Ta5d6ff"Ta5d6ffInvalid gain type, must be decibel as a floating point numberTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__gain Tff7b72= Te6edf3db
Tff7b72if Tff7b72selfTff7b72.Td2a8ff__sourceTb4b4b4: Tff7b72selfTff7b72.Td2a8ff__sourceTff7b72.Td2a8ffgain Tff7b72= Tff7b72selfTff7b72.Td2a8ff__gain

Tf0883e@property
Tff7b72def Td2a8ffrunningTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff__sourceTb4b4b4: Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ff__sourceTff7b72.Td2a8ffshould_run Tff7b72or Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ff__sinkTff7b72.Td2a8ffframe_dequeTb4b4b4)

Tf0883e@property
Tff7b72def Td2a8ffplayingTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffrunning

Tf0883e@property
Tff7b72def Td2a8ffrelease_on_finishTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ff__release_on_finish

Tf0883e@release_on_finishTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffrelease_on_finishTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657typeTb4b4b4(Te6edf3valueTb4b4b4) Tff7b72!= Tffa657boolTb4b4b4: Tff7b72raise Tf85149TypeErrorTb4b4b4(Ta5d6ff"Ta5d6ffProvided value is not boolTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ff__release_on_finish Tff7b72= Te6edf3value

Tf0883e@property
Tff7b72def Td2a8fffinished_callbackTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ff__finished_callback

Tf0883e@finished_callbackTff7b72.Td2a8ffsetter
Tff7b72def Td2a8fffinished_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3callbackTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3callback Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72selfTff7b72.Td2a8ff__finished_callback Tff7b72= Tff7b72None
Tff7b72elif Tff7b72not Tffa657callableTb4b4b4(Te6edf3callbackTb4b4b4)Tb4b4b4: Tff7b72raise Tf85149TypeErrorTb4b4b4(Ta5d6ff"Ta5d6ffProvided callback is not callableTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ff__finished_callback Tff7b72= Te6edf3callback

Tff7b72def Td2a8ff__callback_jobTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff__finished_callback Tff7b72or Tff7b72selfTff7b72.Td2a8ff__release_on_finishTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.2Tb4b4b4)
Tff7b72while Tff7b72selfTff7b72.Td2a8ffrunningTb4b4b4: Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff__finished_callbackTb4b4b4: Tff7b72selfTff7b72.Td2a8ff__finished_callbackTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff__release_on_finishTb4b4b4: Tff7b72selfTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffset_sourceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3pathTb4b4b4: Tff7b72return
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4: Tff7b72raise Tf85149OSErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffFile not found: Tffd700{Te6edf3pathTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__source Tff7b72= Te6edf3OpusFileSourceTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3loopTff7b72=Tff7b72selfTff7b72.Td2a8ff__loopTb4b4b4, Te6edf3gainTff7b72=Tff7b72selfTff7b72.Td2a8ffgainTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__input_pipeline Tff7b72= Te6edf3LXSTTff7b72.Td2a8ffPipelineTb4b4b4(Te6edf3sourceTff7b72=Tff7b72selfTff7b72.Td2a8ff__sourceTb4b4b4, Te6edf3codecTff7b72=Tff7b72selfTff7b72.Td2a8ff__rawTb4b4b4, Te6edf3sinkTff7b72=Tff7b72selfTff7b72.Td2a8ff__loopbackTb4b4b4)

Tff7b72def Td2a8ffloopTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3loopTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3loop Tff7b72== Tff7b72TrueTb4b4b4: Tff7b72selfTff7b72.Td2a8ff__loop Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ff__loop Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ff__sourceTb4b4b4: Tff7b72selfTff7b72.Td2a8ff__sourceTff7b72.Td2a8ffloop Tff7b72= Tff7b72selfTff7b72.Td2a8ff__loop

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffrunning Tff7b72and Tff7b72selfTff7b72.Td2a8ff__sourceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__input_pipelineTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__output_pipelineTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff__finished_callback Tff7b72or Tff7b72selfTff7b72.Td2a8ff__release_on_finishTb4b4b4:
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__callback_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrunning Tff7b72and Tff7b72selfTff7b72.Td2a8ff__sourceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__input_pipelineTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__output_pipelineTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffplayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffreleaseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__sourceTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__input_pipelineTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__output_pipelineTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__input_pipeline Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff__output_pipeline Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff__sink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff__source Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff__loopback Tff7b72= Tff7b72None


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────